function getTailleTexte(wText,className) {
   
    
    div=document.createElement("DIV");
    div.innerHTML=wText;
    div.className = className;
    //div.style.border='1px solid red';
    div.style.position='absolute';
    div.style.top=150;
    div.style.left=150;
    div.style.width='auto';
    div.style.visibility='hidden';
    div.style.whiteSpace='nowrap';
    document.body.appendChild(div);        
    width=div.offsetWidth+0;    
    //detruit la div
    document.body.removeChild(div);    
    return width;
}


function positionneSelonEvent (eltApos, e){

    //affichage
    // D?tection de la position du clic (distance au bords droit et bas)
    var droite = document.body.clientWidth - e.clientX;
    var bas = document.body.clientHeight - e.clientY;    
    // Si il n'y a pas la place ? droite pour placer le menu
    if ( droite < eltApos.offsetWidth ) {    
        // On place le menu ? gauche de la souris
        eltApos.style.left = document.body.scrollLeft + e.clientX - eltApos.offsetWidth;
    }
    // Sinon, on le place ? droite de la souris
    else {
        eltApos.style.left = document.body.scrollLeft + e.clientX;
    }    
    // Pareil vis-?-vis du bas de l'ecran
    if ( bas < eltApos.offsetHeight ) {
        eltApos.style.top = document.body.scrollTop + e.clientY - eltApos.offsetHeight;
    }
    else {
        eltApos.style.top = document.body.scrollTop + e.clientY;
    }
    //alert("eltApos.style.top:"+eltApos.style.top+ " eltApos.style.left:"+eltApos.style.left+"  e.clientX:"+ e.clientX+ "  e.clientY:"+ e.clientY);
}


function positionneSelonPosFournie (eltApos, top,left, height){
var heightAvailable=-1;
    //distance au bords droit et bas
    var droite = document.body.clientWidth - left;
    var bas = document.body.clientHeight -top;

    // Si il n'y a pas la place ? droite pour placer le menu    
    if ( droite < eltApos.offsetWidth ) {    
        // On place le menu ? gauche de la souris
        eltApos.style.left = document.body.scrollLeft + left - eltApos.offsetWidth;
    }
    // Sinon, on le place ? droite de la souris
    else {
        eltApos.style.left = document.body.scrollLeft + left;
    }    
    // Pareil vis-?-vis du bas de l'ecran
    traceExec('top= '+top+' bas= '+bas+' eltApos.offsetHeight= '+eltApos.offsetHeight,1);
    if (  eltApos.offsetHeight > bas  ) {
	    if (  eltApos.offsetHeight < top  ) {
	        eltApos.style.top = document.body.scrollTop 
	        					+ top - eltApos.offsetHeight
	        					- 3
	        					- (height || 0);			
	    }
	    else {
	    	if (top > bas) {
		    	heightAvailable   = top - 9 - (height || 0);
	    	    eltApos.style.top = 3;			
//   	traceExec('up > down heightAvailable = '+heightAvailable,1);
	 	    	}
	    	else {
		    	heightAvailable   = bas - 3;
		        eltApos.style.top = document.body.scrollTop + top;
//   	traceExec('up < down heightAvailable = '+heightAvailable,1);
	    	}
//	    	window.status = 'not enought place to display the list correctly '; 
	    }
	}
    else {
        eltApos.style.top = document.body.scrollTop + top;
    }
    
    return heightAvailable; 
    //alert("eltApos.style.top:"+eltApos.style.top+ " eltApos.style.left:"+eltApos.style.left+"  top:"+ top+ "  left:"+ left);
}

pixWidth = function(oHtml,sansBordure){
//===================================
// sansBordure ==true indique qu'il faut soustraire la bordure de la largeur de l'elt oHtml si elle existe
if (oHtml.pixWidth) {
//  traceExec('pixWidth utilisation de la fct surcharg?e pour oHtml.id= ' + oHtml.id,30);
  return oHtml.pixWidth();
}

var prc = 1;
var nd = oHtml;
var percent = true;
//    else{

        var nivRemontee = 0;
        do {

           if (nd.nodeName=="BODY"){
             //tailleBord=parseInt(document.body.borderWidth);
             return (prc * parseInt(document.body.clientWidth));
           }


           var ndstyle = nd.currentStyle ? nd.currentStyle : nd.style;
           var taille=ndstyle.width;
           //auto
           if (taille=="auto"){
               i=1;
               taille=100;
           }
           else
              i =  ndstyle.width.indexOf('%');

           if (i == -1)
             percent = false;

           else {
             prc = prc * parseInt(taille) / 100;
             nivRemontee += 1;
           }
        } while (percent && (nd=nd.parentNode))

        if (   (nivRemontee > 0)
            && (ndstyle.borderStyle != 'none')
            && (ndstyle.borderStyle != '') )
          tailleBord = parseInt(ndstyle.borderWidth);
        else
          tailleBord = 0;

        if (sansBordure)
          if (parseInt(oHtml.style.borderWidth))
             tailleBord += parseInt(oHtml.style.borderWidth);


//        traceExec('pixWidth nivRemontee= '+nivRemontee + ' taille= '+taille+' tailleBord= '+tailleBord,37);
//        traceExec('pixWidth oHtml.className= '+oHtml.className,37);

        return (prc * (parseInt(taille)-tailleBord*2));

        //return (prc * (parseInt(taille)));
//    }
}
pixHeight = function(oHtml,sansBordure){
//========================
// ? revoir ? n utilise pas les fcts propres (pixHeight) ?ventuelles des parents
traceExec('pixHeight entree sansBordure= '+sansBordure,20);
// pas de miracle : ds Moz si la taille d 1 div a ?t? donn?e en pourcentage de son parent la bordure n'ait pas comprise  ...
if (   sansBordure
    && (!window.getComputedStyle))
    sansBordure = true;
else
    sansBordure = false;

/*
if (sansBordure == 'WinMoz') {
 sansBordure = (window.getComputedStyle) ? false : true;
}
*/
traceExec('pixHeightsansBordure= '+sansBordure,20);

var taille,tailleBord = 0;
var prc = 1;
if (!oHtml) alert('ds pixHeight argt  oHtml undef');
   if (oHtml.pixHeight) {
       traceExec('pixHeight utilisation de la fct surcharg?e pour oHtml.id= ' + oHtml.id,20);
//  alert(oHtml.pixHeight);
      taille = oHtml.pixHeight();
   }

    else{
        var nd = oHtml;
        var percent = true;

        var nivRemontee = 0;
        do {
          //----- noeud BODY atteint
          if (nd.nodeName=="BODY"){
            taille = document.body.clientHeight;
            percent = false;

            traceExec('pixHeight  body sortie',1);
          }
          else {
            //----- recuperation de la taille du nd courant
            traceExec('pixHeight nd.id='+nd.id+' taille= '+getComputStyleStr(nd,"height"),20);
            var taille = getComputStyleStr(nd,'height');

            //------------ taille = auto
            //auto : simule 100%     <-- n'est ce pas une erreur auto ne signifie t il pas adaptation au contenu plutot qu'au container ?
            if (taille=="auto"){
               i=1;
               taille=100;
            }
            //------------ recherche taille == pourcentage
            else
               i =  taille.indexOf('%');
//             i =  ndstyle.height.indexOf('%');

            //------------ taille fix?e
            if (i == -1)
               percent = false;

            //------------ taille = pourcentage
            else {
               prc = prc * parseInt(taille) / 100;
               nivRemontee += 1;
               traceExec('nivRemontee = '+nivRemontee,20);
            }
            if (sansBordure)
               tailleBord += getBorderWidth(nd);
          }

        } while (percent && (nd=nd.parentNode))

    }
    traceExec('pixHeight nivRemontee= '+nivRemontee + ' prc= '+ prc + ' taille= '+taille+' tailleBord= '+tailleBord,20);

traceExec('pixHeight sortie',20);
    return(prc * (parseInt(taille)-tailleBord*2));

}
compOffsetParent = function (oHtml) {
//=============================
// ? revoir :  limit? ne tient pas compte des pourcentages
//traceExec('compOffsetParent entree oHtml.id= '+oHtml.id,20);
  var offsetTop = 0;
  while (oHtml) {
//    traceExec('compOffsetParent oHtml.tN = '+oHtml.tagName,20);
    offsetTop += oHtml.offsetTop;
//    traceExec('compOffsetParent offsetTop = '+offsetTop,20);
    oHtml = oHtml.offsetParent;
  }
//  traceExec('xompOffsetParent sortie offsetTop= '+offsetTop,20);
  return offsetTop;
}


compOffsetTop = function (oHtml) {
//=============================
// ? revoir :  limit? ne tient pas compte des pourcentages
  var offsetTop = 0;
  while (oHtml) {    
    offsetTop += oHtml.offsetTop;
    oHtml = oHtml.offsetParent;
  }
  return offsetTop;
}


compOffsetLeft = function (oHtml) {
//=============================
// ? revoir :  limit? ne tient pas compte des pourcentages
  var offsetLeft = 0;
  while (oHtml) {    
    offsetLeft += oHtml.offsetLeft;
    oHtml = oHtml.offsetParent;
  }
  return offsetLeft;
}


compOffsetHeight = function (oHtml) {
//=============================
// ? revoir :  limit? ne tient pas compte des pourcentages
//traceExec('compOffsetParent entree oHtml.id= '+oHtml.id,20);
  var offsetHeight = 0;
  while (oHtml) {
//    traceExec('compOffsetParent oHtml.tN = '+oHtml.tagName,20);
    offsetHeight += oHtml.offsetHeight;
//    traceExec('compOffsetParent offsetTop = '+offsetTop,20);
    oHtml = oHtml.offsetParent;
  }
//  traceExec('xompOffsetParent sortie offsetTop= '+offsetTop,20);
  return offsetHeight;
}

pixTop = function(oHtml){
//========================
var prc = 1;
var nd = oHtml;
var percent = true;
var i;
  i =  nd.style.top.indexOf('%');
  if (i == -1)
    percent = false;
  else
    prc = prc * parseInt(nd.style.top) / 100;

return ( (prc == 1) ? (parseInt(nd.style.top) || 0)
                    : (prc  * pixHeight(nd) )
       );
}

pixLeft = function(oHtml){
//========================
// FL 15/10/2004 : ce code est completement farfelu !!
//  si left est exprim? en % c'est / au pere du noeud
//  le calcul devrait donc , me semble t'il , ?tre prc * pixWidth(nd.parentNode) 
// observ? ? l'occasoin de l utilisation du DD_behavior , je ne le corrige pas
// tt de suite : il faudrait tester les r?percutions sur d'autres emplois de pixLeft 
// --> a revoir un version moins fautive figure ci-dessous mais
// il faut se poser la Q? de son utilit? / offsetLeft et pour cela r?pertorier les usages actuels de la fct?
var prc = 1;
var nd = oHtml;
var percent = true;
  i =  nd.style.left.indexOf('%');
  if (i == -1)
    percent = false;
  else
    prc = prc * parseInt(nd.style.left) / 100;

return ( (prc == 1) ? (parseInt(nd.style.left) || 0)
                    : (prc  * pixWidth(nd))
       );
}

nvPixLeft = function(oHtml){
//========================
// cf. pixLeft
var prc;
i =  oHtml.style.left.indexOf('%');
if (i == -1)
    prc = 1
else
    prc = parseInt(oHtml.style.left) / 100;

return ( (prc == 1) ? (parseInt(oHtml.style.left) || 0)
                    : (prc  * pixWidth(oHtml.parentNode))
       );
}


oldpixTop = function(oHtml){
//========================
var prc = 1;
var nd = oHtml;
var percent = true;
var i;
do {
  i =  nd.style.top.indexOf('%');
  if (i == -1)
    percent = false;
  else
    prc = prc * parseInt(nd.style.top) / 100;
}while (percent && (nd=nd.parentNode))

return ( (prc == 1) ? (parseInt(nd.style.top) || 0)
                    : (prc  * parseInt(nd.style.height))
       );
}


oldpixLeft = function(oHtml){
//========================
var prc = 1;
var nd = oHtml;
var percent = true;
do {
  i =  nd.style.left.indexOf('%');
  if (i == -1)
    percent = false;
  else
    prc = prc * parseInt(nd.style.left) / 100;
}while (percent && (nd=nd.parentNode))

return ( (prc == 1) ? (parseInt(nd.style.left) || 0)
                    : (prc  * parseInt(nd.style.width))
       );
}


